<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
       //1.需求：统计方法执行了多少次
       var count = 0;  //count变量并不安全，因为是全局变量。
       function test01(){
           count++; //自增+1
       }
       test01();
       test01();
       //test01();
       console.log(count);

       //2.完成上述，使用局部变量
       function test02(){
           var count = 0; //局部变量
           return count++; //外部无法访问count,只能通过return才能将count变量返回，并输出
       }
       test02();
       test02();
       test02();
       console.log(test02()); //每次调用方法，首先会将变量还原为0

       //3.再嵌套一个函数，js是支持函数嵌套的,完成上述
       function test03(){
           var count = 0; //局部变量
           function jia(){
              return count++; //外部无法访问count,只能通过return才能将count变量返回，并输出
           }
           jia();
           return count;
       }
       test03();
       test03();
       test03();
       console.log(test03()); //每次调用方法，首先会将变量还原为0

        /*闭包==>是一种保护私有变量的机制，在函数执行时形成私有的作用域，
          保护里面的私有变量不 受外界干扰。*/
       //4.如果每次只调用test1()里面的jia()就好了。ok，闭包帮你解决此问题！
       function test04(){
           var count = 0; //局部变量
           function jia(){
               return count += 1;
           }
           return jia;
       }
       var fn = test04();  //fn <==> function jia(){return count+=1; }
       fn();
       fn();
       console.log( fn() ); //每次调用方法，首先会将变量还原为0
    </script>
</body>
</html>